struct Test{
    str1:String,
    str2:*const String
}

impl Test {
    fn new(str:&str)->Self{
        Test{
            str1:String::from(str),
            str2:std::ptr::null()
        }
    }
    fn init(&mut self){
        let a=&self.str1;
        self.str2=a;
    }
    fn str1(&self)->&String{
        &self.str1
    }
    
    fn str2(&self)->&String{
        return unsafe {
            let a=&*self.str2;
            return a;
        };
    }
}

pub fn test(){
    let mut a=Test::new("a");
    a.init();
    let mut b=Test::new("b");
    b.init();
    std::mem::swap(&mut a,&mut b);
    // println!("{} {}",a.str1(),a.str2());//str2仍然指向原来a变量中str1的地址 所以交换后str2还是a而不是b
    // println!("{} {}",b.str1(),b.str2());
    drop(b);
    println!("{}",a.str2());
}